// 导入express框架
let express =require("express");
let path =require("path");
const bodyparser=require("body-parser");
const formidable =require("formidable")
// 导入向其他服务器端请求数据的第三方模块
let request = require("request");



// 创建服务器对象
const app = express();
// 配置bodyparser
app.use(bodyparser.json());

// 请求拦截实现静态资源访问
app.use(express.static(path.join(__dirname,"public")))


// 写一个请求方式是get的api接口
app.get("/ajax",(req,res)=>{
	res.send(req.query)
})
app.get("/ajax02",(req,res)=>{
	res.send({name:"zhangsan",age:20})
})



// 写一个请求方式是post的api接口
app.post("/ajax",(req,res)=>{
	res.send(req.body);
	// res.status(400).send("this is postajax");     
})



// 写一个请求方式是post的接受formData表单对象api接口(解析formData对象需要formidable第三方模块 )
app.post("/formData",(req,res)=>{
	// 创建formidable表单解析对象
	let form = new formidable.IncomingForm();
	// 解析客户端传递过来的FormData对象
	form.parse(req,(err,fields,files)=>{
		res.send(fields);
	})

})




// 写一个请求方式是post的接受formData上传二进制文件的路由(解析formData对象需要formidable第三方模块 )
app.post("/upload",(req,res)=>{
	// 创建formidable表单解析对象
	let form = new formidable.IncomingForm();
	// 设置上传的二进制文件的存储路径
	form.uploadDir = path.join(__dirname,"public","upload");
	// 保留上传文件的后缀名
	form.keepExtensions = true;
	// 解析客户端传递过来的FormData对象
	form.parse(req,(err,fields,files)=>{
		// 将客户端传过来的文件地址响应到客户端
		// res.send(files.attrName.path);
		res.send({
			path:files.attrName.path.split("public")[1]

		});
	})


})



// 写一个通过服务器请求服务器的方式解决同源政策的方法的路由(需要一个request的第三方模块来接收来自其他服务器的响应来的数据)
app.get("/server",(req,res)=>{
	request("http://localhost:3001/cross",(err,respons,body)=>{
		res.send(body);
	})

})



// 写用于测试$.ajax()方法的get和post路由
app.get("/base",(req,res)=>{
	res.send({
		name:"zhangsan",
		age:20,
	})
	// res.send(req.query)
});

app.post("/base",(req,res)=>{
	// res.send({
	// 	name:"lisi",
	// 	age:22,
	// })
	res.send(req.body);
});



// 写用于测试$.ajax()方法发送jsonp请求的路由
app.get("/jsonp1",(req,res)=>{
	res.jsonp({name:"zhaoliu",age:99});
});

app.get("/jsonp2",(req,res)=>{
	let cb = req.query.cb;
	const data=cb + '({name:"王十五"})';
	res.send(data);



})

// 写用于测试$.get()和$.post()方法发送请求的路由
app.get("/getTest",(req,res)=>{
	res.send("getok")
})


app.post("/postTest",(req,res)=>{
	res.send("postok")
})



// 写一个用于测试jq中$.ajax的全局事件和NProgress插件的路由
app.get("/nprogress",(req,res)=>{
	res.send("NProgress请求成功了！")
})











// 监听端口port
app.listen(3000,()=>{
console.log("s1服务器启动成功！")
});









